Repository navigation
Conversation
…Tencent#774) 按存储归属读取当前会话的写法在 assistant_workbench.go 里重复了 6 次, 新增 (*assistantHandlers).storedAssistantSession 收拢这条归属规则, prepareWorkbenchContext 开头只读一次并复用结果;历史附件收集抽成 historicalAttachmentIDs 纯函数。错误文案、判断顺序与附件覆盖语义不变。 Co-Authored-By: Claude Code <noreply@anthropic.com>
|
全量
其余全部通过,包括新增的 |
… issue checks Co-Authored-By: Claude Code <noreply@anthropic.com>
|
补测试(自动检查,head 63bb1a5 → d4b9428) 补了什么:新增
为什么:这次把 6 处会话读取合并成一次
本地验证(Go 1.26.11): |
fx-kurumi
left a comment
There was a problem hiding this comment.
Review head d4b9428:结论通过(等同 Approve;作者和评审账号相同,所以用 Comment)
等价性核对
internal/httpapi/assistant_shared.go:29-34的storedAssistantSession遇到id == ""直接返回未找到。repo 层的AssistantSession(internal/repo/assistant.go:29-33)本来就对空 ID 和纯空白 ID 返回 false,所以原来没加保护的读取(历史附件、workspaceTurnContext)行为不变。assistant_workbench.go:204-208:跨项目校验和historicalAttachmentIDs的先后顺序、报错文案都没变,!Shared && ProjectID == req.ProjectID过滤也保留了。- 原来分 6 次读会话,现在只读一次快照(
:215、:226、:326、:357、workspaceTurnContext)。核对过:几次读取之间没有任何代码写会话,stored也没被修改(被修改的只有req.Messages)。唯一的差别是函数执行过程中不会再读到其他请求的并发写入,几处读到的数据反而更一致。
评论核对:作者补的 guard 测试覆盖了原来漏掉的 2 个变异(跨项目拒绝、已存需求的检查与注入),测试有效。没有其他 review 意见。
本地验证(Go 1.26.11):gofmt 和 vet 通过;-run 'StoredAssistantSession|HistoricalAttachment|PrepareWorkbenchContext|Workbench|WorkspaceTurn' 通过。全包只有 2 个 Chromium 用例失败,main 上同样失败。和 main 无冲突,CI 16/16 通过。不涉及界面。
… and attachment authors in workbench context Co-Authored-By: Claude Code <noreply@anthropic.com>
|
补测试(自动巡检,head 为什么补:对
补了什么:新增
19 种变异剩 1 个等价变异(去掉空 id 判断, 本地验证: |
Closes #774
改了什么
internal/httpapi/assistant_shared.go:新增(*assistantHandlers).storedAssistantSession(id, userID),空 ID 直接返回未找到,其余统一经assistantStorageOwner找到存储槽位后读取,把「共享/项目会话按创建者归属存储」这条规则收在一处。internal/httpapi/assistant_workbench.go:prepareWorkbenchContext开头读一次会话存入stored, hasStored,后续「会话属于其他项目」校验、关联需求上下文、讨论分支提示、附件作者回退、子 Agent resume 复用全部复用这份结果;原 6 处重复查询收敛为 1 处。历史附件收集抽成纯函数historicalAttachmentIDs(session, found, projectID)。workspaceTurnContext同步改用新 helper。internal/httpapi/assistant_workbench_session_test.go。为什么
同一次请求里把同一个会话从库里读 5–6 次,每处再各自判空,读起来像 6 件不同的事;归属规则散落各调用点,容易漏改。
怎么验证
gofmt -l internal/httpapi/无输出;go vet ./internal/httpapi/通过。go test ./internal/httpapi/ -count=1全部通过,包含新增用例:空 ID / 未知 ID 返回未找到、其他用户读不到私有会话、历史附件只继承同项目非共享会话。🤖 Generated with Claude Code